import pca
from numpy import *

#加入一个由1000个数据点组成的数据集
dataMat = pca.loadDataSet('testSet.txt')
print("dataMat\n",dataMat)
print("dataMat's shape\n",shape(dataMat))
lowDMat , reconMat = pca.pca(dataMat ,1)
print("lowDMat's shape \n",shape(lowDMat))
print("reconMat's shape\n",shape(reconMat))
######将降维的矩阵和原始数据一起绘制起来########
import matplotlib
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(dataMat[:,0].flatten().A[0],dataMat[:,1].flatten().A[0],marker = '^',s=90)
ax.scatter(reconMat[:,0].flatten().A[0],reconMat[:,1].flatten().A[0],marker = 'o',s = 50, c= 'red')
#plt.show()

##############对半导体数据进行降维的例子####################
dataMat = pca.replaceNanWithMean()
#借用PCA算法的例子进行分析
meanVals = mean(dataMat , axis = 0)
meanRemoved = dataMat - meanVals
#计算协方差矩阵
covMat = cov(meanRemoved,rowvar = 0)
#对该矩阵进行特征值分析
eigVals ,eigVects = linalg.eig(mat(covMat))
print("eigVals\n",eigVals)
#####根据得出的方差数值看到，方差越大，代表数据的稳定性多变，相反方差越少的是直接可以降低维度的，
#这里根据观察到数据看到保留的方差比较理想的值是前6-20个数值。